Move the signal and idle disconnections into the dispose function, as well
authorEmmanuele Bassi <ebassi@gnome.org>
Sun, 31 Dec 2006 16:35:00 +0000 (16:35 +0000)
committerEmmanuele Bassi <ebassi@src.gnome.org>
Sun, 31 Dec 2006 16:35:00 +0000 (16:35 +0000)
2006-12-31  Emmanuele Bassi  <ebassi@gnome.org>

* gtk/gtkrecentchoosermenu.c: Move the signal and idle
disconnections into the dispose function, as well as the
object unrefs; reset every handler id and the
pointers. (suggested by Paolo Borelli, #390873)

svn path=/trunk/; revision=16997

ChangeLog
gtk/gtkrecentchoosermenu.c

index efe739adcd2f79d51005e4ef42c246ade71930c5..04ce75206a83dcc363da7bfa5a2fa2b6eaa02151 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-12-31  Emmanuele Bassi  <ebassi@gnome.org>
+
+       * gtk/gtkrecentchoosermenu.c: Move the signal and idle
+       disconnections into the dispose function, as well as the
+       object unrefs; reset every handler id and the
+       pointers. (suggested by Paolo Borelli, #390873)
+
 2006-12-31  Matthias Clasen  <mclasen@redhat.com>
 
        * gtk/gtkprintoperation-win32.c: Include windows.h (#391229,
index eba0068872eee763a266b01726fd328b9b3e7263..12b9ca274e9e0c3954b49f22789ad79f0e36cb5b 100644 (file)
@@ -94,6 +94,7 @@ enum {
 #define GTK_RECENT_CHOOSER_MENU_GET_PRIVATE(obj)       (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_RECENT_CHOOSER_MENU, GtkRecentChooserMenuPrivate))
 
 static void     gtk_recent_chooser_menu_finalize    (GObject                   *object);
+static void     gtk_recent_chooser_menu_dispose     (GObject                   *object);
 static GObject *gtk_recent_chooser_menu_constructor (GType                      type,
                                                     guint                      n_construct_properties,
                                                     GObjectConstructParam     *construct_params);
@@ -181,6 +182,7 @@ gtk_recent_chooser_menu_class_init (GtkRecentChooserMenuClass *klass)
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
   gobject_class->constructor = gtk_recent_chooser_menu_constructor;
+  gobject_class->dispose = gtk_recent_chooser_menu_dispose;
   gobject_class->finalize = gtk_recent_chooser_menu_finalize;
   gobject_class->set_property = gtk_recent_chooser_menu_set_property;
   gobject_class->get_property = gtk_recent_chooser_menu_get_property;
@@ -240,30 +242,51 @@ gtk_recent_chooser_menu_finalize (GObject *object)
   GtkRecentChooserMenu *menu = GTK_RECENT_CHOOSER_MENU (object);
   GtkRecentChooserMenuPrivate *priv = menu->priv;
   
-  g_signal_handler_disconnect (priv->manager, priv->manager_changed_id);
-  priv->manager_changed_id = 0;
-
-  if (priv->populate_id)
-    g_source_remove (priv->populate_id);
-
   priv->manager = NULL;
   
   if (priv->sort_data_destroy)
     {
       priv->sort_data_destroy (priv->sort_data);
-      
       priv->sort_data_destroy = NULL;
-      priv->sort_data = NULL;
-      priv->sort_func = NULL;
     }
+
+  priv->sort_data = NULL;
+  priv->sort_func = NULL;
   
-  if (priv->tooltips)
-    g_object_unref (priv->tooltips);
+  G_OBJECT_CLASS (gtk_recent_chooser_menu_parent_class)->finalize (object);
+}
+
+static void
+gtk_recent_chooser_menu_dispose (GObject *object)
+{
+  GtkRecentChooserMenu *menu = GTK_RECENT_CHOOSER_MENU (object);
+  GtkRecentChooserMenuPrivate *priv = menu->priv;
+
+  if (priv->manager_changed_id)
+    {
+      g_signal_handler_disconnect (priv->manager, priv->manager_changed_id);
+      priv->manager_changed_id = 0;
+    }
   
+  if (priv->populate_id)
+    {
+      g_source_remove (priv->populate_id);
+      priv->populate_id = 0;
+    }
+
+  if (priv->tooltips)
+    {
+      g_object_unref (priv->tooltips);
+      priv->tooltips = NULL;
+    }
   if (priv->current_filter)
-    g_object_unref (priv->current_filter);
+    {
+      g_object_unref (priv->current_filter);
+      priv->current_filter = NULL;
+    }
   
-  G_OBJECT_CLASS (gtk_recent_chooser_menu_parent_class)->finalize (object);
+  G_OBJECT_CLASS (gtk_recent_chooser_menu_parent_class)->dispose (object);
 }
 
 static GObject *